#ifndef _FDT_H
#define _FDT_H

#include "libfdt_env.h"

struct fdt_header
{
    fdt32_t magic;             /* magic word FDT_MAGIC */
    fdt32_t totalsize;         /* total size of DT block */
    fdt32_t off_dt_struct;     /* offset to structure */
    fdt32_t off_dt_strings;    /* offset to strings */
    fdt32_t off_mem_rsvmap;    /* offset to memory reserve map */
    fdt32_t version;           /* format version */
    fdt32_t last_comp_version; /* last compatible version */

    /* version 2 fields below */
    fdt32_t boot_cpuid_phys; /* Which physical CPU id we're
                    booting on */
    /* version 3 fields below */
    fdt32_t size_dt_strings; /* size of the strings block */

    /* version 17 fields below */
    fdt32_t size_dt_struct; /* size of the structure block */
};

struct fdt_node_header
{
    fdt32_t tag;
    char name[0];
};

struct fdt_reserve_entry {
	fdt64_t address;
	fdt64_t size;
};

//描述 DTB 中的属性格式 ：表示 DTB 文件中属性的二进制结构，是设备树在内存中的原始存储格式
//直接映射 DTB 内容 ：与 DTB 文件的二进制布局完全一致，用于解析和生成 DTB
struct fdt_property
{
    fdt32_t tag;
    fdt32_t len;
    fdt32_t nameoff;
    char data[0];
};

#define FDT_MAGIC	0xd00dfeed	/* 4: version, 4: total size */

#define FDT_TAGSIZE	sizeof(fdt32_t)

#define FDT_BEGIN_NODE	0x1		/* Start node: full name */
#define FDT_END_NODE	0x2		/* End node */
#define FDT_PROP	0x3		/* Property: name off,
					   size, content */
#define FDT_NOP		0x4		/* nop */
#define FDT_END		0x9

#endif
